package cn.iocoder.yudao.module.wine.dal.mysql.complaininfo;

import java.util.*;
import java.util.stream.Collectors;

import cn.hutool.core.collection.CollectionUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.ip.core.Area;
import cn.iocoder.yudao.framework.ip.core.enums.AreaTypeEnum;
import cn.iocoder.yudao.framework.ip.core.utils.AreaUtils;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
import cn.iocoder.yudao.module.wine.controller.app.complaininfo.vo.AppComplainInfoPageReqVO;
import cn.iocoder.yudao.module.wine.controller.app.complaininfo.vo.AppComplainInfoRespVO;
import cn.iocoder.yudao.module.wine.dal.dataobject.businesscredit.BusinessCreditDO;
import cn.iocoder.yudao.module.wine.dal.dataobject.businessuser.BusinessUserDO;
import cn.iocoder.yudao.module.wine.dal.dataobject.complaininfo.ComplainInfoDO;
import cn.iocoder.yudao.module.wine.dal.dataobject.membertype.MemberTypeDO;
import cn.iocoder.yudao.module.wine.dal.dataobject.userfans.UserFansDO;
import cn.iocoder.yudao.module.wine.enums.PublishInfoEnum;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.wine.controller.admin.complaininfo.vo.*;

/**
 * 投诉信息 Mapper
 *
 * @author 管理员
 */
@Mapper
public interface ComplainInfoMapper extends BaseMapperX<ComplainInfoDO> {

    default PageResult<ComplainInfoRespVO> selectPage(ComplainInfoPageReqVO reqVO) {
        return selectJoinPage(reqVO, ComplainInfoRespVO.class, new MPJLambdaWrapperX<ComplainInfoDO>()
                .eqIfPresent(ComplainInfoDO::getUserId, reqVO.getUserId())
                .eqIfPresent(ComplainInfoDO::getTypeId, reqVO.getTypeId())
                .likeIfPresent(ComplainInfoDO::getInfoName, reqVO.getInfoName())
                .likeIfPresent(ComplainInfoDO::getRealName, reqVO.getRealName())
                .eqIfPresent(ComplainInfoDO::getMobile, reqVO.getMobile())
                .eqIfPresent(ComplainInfoDO::getAreaId, reqVO.getAreaId())
                .likeIfPresent(ComplainInfoDO::getAreaName, reqVO.getAreaName())
                .eqIfPresent(ComplainInfoDO::getAddress, reqVO.getAddress())
                .eqIfPresent(ComplainInfoDO::getCompany, reqVO.getCompany())
                .eqIfPresent(ComplainInfoDO::getImage, reqVO.getImage())
                .eqIfPresent(ComplainInfoDO::getImages, reqVO.getImages())
                .eqIfPresent(ComplainInfoDO::getDescription, reqVO.getDescription())
                .eqIfPresent(ComplainInfoDO::getIsTop, reqVO.getIsTop())
                .eqIfPresent(ComplainInfoDO::getSort, reqVO.getSort())
                .eqIfPresent(ComplainInfoDO::getSex, reqVO.getSex())
                .betweenIfPresent(ComplainInfoDO::getCreateTime, reqVO.getCreateTime())

                .selectAll(ComplainInfoDO.class).select(MemberUserDO::getNickname)
                .selectAs(MemberUserDO::getName,ComplainInfoRespVO::getName)

                .leftJoin(MemberUserDO.class, MemberUserDO::getId, ComplainInfoDO::getUserId)

                .orderByDesc(ComplainInfoDO::getCreateTime)); //JACKCHEN
    }

    default PageResult<AppComplainInfoRespVO> selectComplainInfoList(AppComplainInfoPageReqVO reqVO) {
        List<Integer> areaList = new ArrayList<>();
        if (reqVO.getAreaId() != null) {
            Integer areaId = reqVO.getAreaId();
            Area area = AreaUtils.getArea(areaId);
            if (area.getType().equals(AreaTypeEnum.PROVINCE.getType())) {
                List<Area> children = area.getChildren();
                List<Integer> collect = children.stream().map(item -> item.getId()).collect(Collectors.toList());
                collect.forEach(item -> {
                    Area area1 = AreaUtils.getArea(item);
                    List<Integer> collect1 = area1.getChildren().stream().map(data -> data.getId()).collect(Collectors.toList());
                    areaList.addAll(collect1);
                });
                areaList.addAll(collect);
            }
            if (area.getType().equals(AreaTypeEnum.CITY.getType())) {
                List<Area> children = area.getChildren();
                List<Integer> collect = children.stream().map(item -> item.getId()).collect(Collectors.toList());
                areaList.addAll(collect);
            }
        }
//        String keywords = reqVO.getKeywords();
//        if (!StringUtils.isEmpty(keywords)) {
//            String[] split = keywords.split(" ");
//            ArrayList<AppComplainInfoRespVO> list = new ArrayList<>();
//            for (String s : split) {
//                List<AppComplainInfoRespVO> data = selectJoinList(AppComplainInfoRespVO.class, new MPJLambdaWrapperX<ComplainInfoDO>()
//                        .eqIfPresent(ComplainInfoDO::getUserId, reqVO.getUserId())
//                        .eqIfPresent(ComplainInfoDO::getTypeId, reqVO.getTypeId())
//                        .likeIfPresent(ComplainInfoDO::getInfoName, s)
//                        .eqIfPresent(ComplainInfoDO::getIsTop, reqVO.getIsTop())
//                        .eqIfPresent(ComplainInfoDO::getAudit, PublishInfoEnum.PASS_THE_AUDIT.getCode())
//                        .in(!CollectionUtil.isEmpty(areaList),ComplainInfoDO::getAreaId, areaList)
//                        .or(wrapper -> {
//                            wrapper.eqIfExists(ComplainInfoDO::getUserId, reqVO.getUserId())
//                                    .eqIfExists(ComplainInfoDO::getTypeId, reqVO.getTypeId())
//                                    .likeIfExists(ComplainInfoDO::getRealName, s)
//                                    .eqIfExists(ComplainInfoDO::getIsTop, reqVO.getIsTop())
//                                    .eqIfExists(ComplainInfoDO::getAudit, PublishInfoEnum.PASS_THE_AUDIT.getCode())
//                                    .in(!CollectionUtil.isEmpty(areaList),ComplainInfoDO::getAreaId, areaList);
//                        })
//                        .or(wrapper -> {
//                            wrapper.eqIfExists(ComplainInfoDO::getUserId, reqVO.getUserId())
//                                    .eqIfExists(ComplainInfoDO::getTypeId, reqVO.getTypeId())
//                                    .likeIfExists(ComplainInfoDO::getMobile, s)
//                                    .eqIfExists(ComplainInfoDO::getIsTop, reqVO.getIsTop())
//                                    .eqIfExists(ComplainInfoDO::getAudit, PublishInfoEnum.PASS_THE_AUDIT.getCode())
//                                    .in(!CollectionUtil.isEmpty(areaList),ComplainInfoDO::getAreaId, areaList);
//                        })
//                        .or(wrapper -> {
//                            wrapper.eqIfExists(ComplainInfoDO::getUserId, reqVO.getUserId())
//                                    .eqIfExists(ComplainInfoDO::getTypeId, reqVO.getTypeId())
//                                    .likeIfExists(ComplainInfoDO::getDescription, s)
//                                    .eqIfExists(ComplainInfoDO::getIsTop, reqVO.getIsTop())
//                                    .eqIfExists(ComplainInfoDO::getAudit, PublishInfoEnum.PASS_THE_AUDIT.getCode())
//                                    .in(!CollectionUtil.isEmpty(areaList),ComplainInfoDO::getAreaId, areaList);
//                        })
//                        .or(wrapper -> {
//                            wrapper.eqIfExists(ComplainInfoDO::getUserId, reqVO.getUserId())
//                                    .eqIfExists(ComplainInfoDO::getTypeId, reqVO.getTypeId())
//                                    .likeIfExists(ComplainInfoDO::getCompany, s)
//                                    .eqIfExists(ComplainInfoDO::getIsTop, reqVO.getIsTop())
//                                    .eqIfExists(ComplainInfoDO::getAudit, PublishInfoEnum.PASS_THE_AUDIT.getCode())
//                                    .in(!CollectionUtil.isEmpty(areaList),ComplainInfoDO::getAreaId, areaList);
//                        })
//                        .or(wrapper -> {
//                            wrapper.eqIfExists(ComplainInfoDO::getUserId, reqVO.getUserId())
//                                    .eqIfExists(ComplainInfoDO::getTypeId, reqVO.getTypeId())
//                                    .likeIfExists(ComplainInfoDO::getAreaName, s)
//
//                                    .eqIfExists(ComplainInfoDO::getIsTop, reqVO.getIsTop())
//                                    .eqIfExists(ComplainInfoDO::getAudit, PublishInfoEnum.PASS_THE_AUDIT.getCode())
//                                    .in(!CollectionUtil.isEmpty(areaList),ComplainInfoDO::getAreaId, areaList);
//                        })
//                        .or(wrapper -> {
//                            wrapper.eqIfExists(ComplainInfoDO::getUserId, reqVO.getUserId())
//                                    .eqIfExists(ComplainInfoDO::getTypeId, reqVO.getTypeId())
//                                    .likeIfExists(ComplainInfoDO::getAddress, s)
//                                    .eqIfExists(ComplainInfoDO::getIsTop, reqVO.getIsTop())
//                                    .eqIfExists(ComplainInfoDO::getAudit, PublishInfoEnum.PASS_THE_AUDIT.getCode())
//                                    .in(!CollectionUtil.isEmpty(areaList),ComplainInfoDO::getAreaId, areaList);
//                        })
//                        .leftJoin(MemberUserDO.class, MemberUserDO::getId, ComplainInfoDO::getUserId)
//                        .leftJoin(BusinessUserDO.class, BusinessUserDO::getUserId, ComplainInfoDO::getUserId)
//                        .leftJoin(BusinessCreditDO.class, BusinessCreditDO::getId, BusinessUserDO::getCreditId)
//                        .leftJoin(MemberTypeDO.class, MemberTypeDO::getId, BusinessUserDO::getMemberTypeId)
//                        .selectAs(BusinessCreditDO::getLevel, AppComplainInfoRespVO::getLevel)
//                        .selectAs(BusinessCreditDO::getIcon, AppComplainInfoRespVO::getIcon)
//                        .selectAs(BusinessUserDO::getIsAuth, AppComplainInfoRespVO::getIsAuth)
//                        .selectAs(BusinessUserDO::getAreaId, AppComplainInfoRespVO::getUserAreaId)
//                        .selectAs(MemberTypeDO::getName, AppComplainInfoRespVO::getMemberTypeName)
//                        .selectAs(MemberTypeDO::getIcon, AppComplainInfoRespVO::getMemberTypeIcon)
//                        .selectAs(MemberUserDO::getNickname, AppComplainInfoRespVO::getNickname)
//                        .selectAs(MemberUserDO::getAvatar, AppComplainInfoRespVO::getAvatar)
//                        .selectAs(MemberUserDO::getSex, AppComplainInfoRespVO::getSex)
//                        .selectAll(ComplainInfoDO.class)
//                        .orderByDesc(ComplainInfoDO::getIsTop)
//                        .orderByAsc(ComplainInfoDO::getSort));
//                list.addAll(data);
//            }
//            if (CollectionUtil.isEmpty(list)) {
//                return list.stream().distinct().collect(Collectors.toList());
//            }
//            return list;
//        }
        return selectJoinPage(reqVO, AppComplainInfoRespVO.class, new MPJLambdaWrapperX<ComplainInfoDO>()
                .eqIfPresent(ComplainInfoDO::getUserId, reqVO.getUserId())
                .eqIfPresent(ComplainInfoDO::getTypeId, reqVO.getTypeId())
                .eqIfPresent(ComplainInfoDO::getIsTop, reqVO.getIsTop())
                .eqIfPresent(ComplainInfoDO::getSort, reqVO.getSort())
                .likeIfPresent(ComplainInfoDO::getInfoName, reqVO.getInfoName())
                .eqIfPresent(ComplainInfoDO::getAudit, PublishInfoEnum.PASS_THE_AUDIT.getCode())
                .in(!CollectionUtil.isEmpty(areaList), ComplainInfoDO::getAreaId, areaList)
                .leftJoin(MemberUserDO.class, MemberUserDO::getId, ComplainInfoDO::getUserId)
                .leftJoin(BusinessUserDO.class, BusinessUserDO::getUserId, ComplainInfoDO::getUserId)
                .leftJoin(BusinessCreditDO.class, BusinessCreditDO::getId, BusinessUserDO::getCreditId)
                .leftJoin(MemberTypeDO.class, MemberTypeDO::getId, BusinessUserDO::getMemberTypeId)

                .selectAs(BusinessCreditDO::getLevel, AppComplainInfoRespVO::getLevel)
                .selectAs(BusinessCreditDO::getIcon, AppComplainInfoRespVO::getIcon)
                .selectAs(BusinessCreditDO::getId, AppComplainInfoRespVO::getCreditId)
                .selectAs(BusinessCreditDO::getName, AppComplainInfoRespVO::getCreditName)

                .selectAs(BusinessUserDO::getIsAuth, AppComplainInfoRespVO::getIsAuth)
                .selectAs(BusinessUserDO::getAreaId, AppComplainInfoRespVO::getUserAreaId)
                .selectAs(BusinessUserDO::getBondName, AppComplainInfoRespVO::getBondName)

                .selectAs(MemberTypeDO::getName, AppComplainInfoRespVO::getMemberTypeName)
                .selectAs(MemberTypeDO::getIcon, AppComplainInfoRespVO::getMemberTypeIcon)

                .selectAs(MemberUserDO::getNickname, AppComplainInfoRespVO::getNickname)
                .selectAs(MemberUserDO::getAvatar, AppComplainInfoRespVO::getAvatar)
                .selectAs(MemberUserDO::getMark, AppComplainInfoRespVO::getMark)

                .selectAll(ComplainInfoDO.class)
                .orderByDesc(ComplainInfoDO::getCreateTime)
        );
    }

    default AppComplainInfoRespVO getJoinInfoById(Long id) {
        return selectJoinOne(AppComplainInfoRespVO.class, new MPJLambdaWrapperX<ComplainInfoDO>()
                .eq(ComplainInfoDO::getId, id)
                .leftJoin(UserFansDO.class,
                        on -> on.eq(UserFansDO::getUserId, ComplainInfoDO::getUserId)
                                .eq(UserFansDO::getFansId, SecurityFrameworkUtils.getLoginUserId())
                )
                .selectAll(ComplainInfoDO.class)
                .leftJoin(MemberUserDO.class, MemberUserDO::getId, ComplainInfoDO::getUserId)
                .leftJoin(BusinessUserDO.class, BusinessUserDO::getUserId, ComplainInfoDO::getUserId)
                .leftJoin(BusinessCreditDO.class, BusinessCreditDO::getId, BusinessUserDO::getCreditId)
                .leftJoin(MemberTypeDO.class, MemberTypeDO::getId, BusinessUserDO::getMemberTypeId)

                .selectAs(BusinessCreditDO::getLevel, AppComplainInfoRespVO::getLevel)
                .selectAs(BusinessCreditDO::getIcon, AppComplainInfoRespVO::getIcon)
                .selectAs(BusinessCreditDO::getId, AppComplainInfoRespVO::getCreditId)
                .selectAs(BusinessCreditDO::getName, AppComplainInfoRespVO::getCreditName)

                .selectAs(BusinessUserDO::getIsAuth, AppComplainInfoRespVO::getIsAuth)
                .selectAs(BusinessUserDO::getAreaId, AppComplainInfoRespVO::getUserAreaId)
                .selectAs(BusinessUserDO::getBondName, AppComplainInfoRespVO::getBondName)

                .selectAs(MemberTypeDO::getName, AppComplainInfoRespVO::getMemberTypeName)
                .selectAs(MemberTypeDO::getIcon, AppComplainInfoRespVO::getMemberTypeIcon)


                .selectAs(MemberUserDO::getNickname, AppComplainInfoRespVO::getNickname)
                .selectAs(MemberUserDO::getAvatar, AppComplainInfoRespVO::getAvatar)
                .selectAs(MemberUserDO::getMark, AppComplainInfoRespVO::getMark)

                .selectAs(UserFansDO::getSubscribeStatus, AppComplainInfoRespVO::getSubscribeStatus)
        );
    }

    default List<AppComplainInfoRespVO> getMyPublishList(AppComplainInfoPageReqVO reqVO) {
//        String keywords = reqVO.getKeywords();
//        if (!StringUtils.isEmpty(keywords)) {
//            String[] split = keywords.split(" ");
//            ArrayList<AppComplainInfoRespVO> list = new ArrayList<>();
//            for (String s : split) {
//                List<AppComplainInfoRespVO> data = selectJoinList(AppComplainInfoRespVO.class, new MPJLambdaWrapperX<ComplainInfoDO>()
//                        .likeIfPresent(ComplainInfoDO::getInfoName, s)
//                        .eq(ComplainInfoDO::getUserId, SecurityFrameworkUtils.getLoginUserId())
//                        .eqIfPresent(ComplainInfoDO::getTypeId, reqVO.getTypeId())
//                        .eqIfPresent(ComplainInfoDO::getAreaId, reqVO.getAreaId())
//                        .eqIfPresent(ComplainInfoDO::getIsTop, reqVO.getIsTop())
//                        .eqIfPresent(ComplainInfoDO::getSort, reqVO.getSort())
//                        .eqIfPresent(ComplainInfoDO::getAudit, PublishInfoEnum.PASS_THE_AUDIT.getCode())
//                        .or(wrapper -> {
//                            wrapper.likeIfExists(ComplainInfoDO::getRealName, s)
//                                    .eq(ComplainInfoDO::getUserId, SecurityFrameworkUtils.getLoginUserId())
//                                    .eqIfExists(ComplainInfoDO::getTypeId, reqVO.getTypeId())
//                                    .eqIfExists(ComplainInfoDO::getAreaId, reqVO.getAreaId())
//                                    .eqIfExists(ComplainInfoDO::getIsTop, reqVO.getIsTop())
//                                    .eqIfExists(ComplainInfoDO::getSort, reqVO.getSort())
//                                    .eqIfExists(ComplainInfoDO::getAudit, PublishInfoEnum.PASS_THE_AUDIT.getCode());
//                        })
//                        .or(wrapper -> {
//                            wrapper.likeIfExists(ComplainInfoDO::getMobile, s)
//                                    .eq(ComplainInfoDO::getUserId, SecurityFrameworkUtils.getLoginUserId())
//                                    .eqIfExists(ComplainInfoDO::getTypeId, reqVO.getTypeId())
//                                    .eqIfExists(ComplainInfoDO::getAreaId, reqVO.getAreaId())
//                                    .eqIfExists(ComplainInfoDO::getIsTop, reqVO.getIsTop())
//                                    .eqIfExists(ComplainInfoDO::getSort, reqVO.getSort())
//                                    .eqIfExists(ComplainInfoDO::getAudit, PublishInfoEnum.PASS_THE_AUDIT.getCode());
//                        })
//                        .or(wrapper -> {
//                            wrapper.likeIfExists(ComplainInfoDO::getDescription, s)
//                                    .eq(ComplainInfoDO::getUserId, SecurityFrameworkUtils.getLoginUserId())
//                                    .eqIfExists(ComplainInfoDO::getTypeId, reqVO.getTypeId())
//                                    .eqIfExists(ComplainInfoDO::getAreaId, reqVO.getAreaId())
//                                    .eqIfExists(ComplainInfoDO::getIsTop, reqVO.getIsTop())
//                                    .eqIfExists(ComplainInfoDO::getSort, reqVO.getSort())
//                                    .eqIfExists(ComplainInfoDO::getAudit, PublishInfoEnum.PASS_THE_AUDIT.getCode());
//                        })
//                        .or(wrapper -> {
//                            wrapper.likeIfExists(ComplainInfoDO::getCompany, s)
//                                    .eq(ComplainInfoDO::getUserId, SecurityFrameworkUtils.getLoginUserId())
//                                    .eqIfExists(ComplainInfoDO::getTypeId, reqVO.getTypeId())
//                                    .eqIfExists(ComplainInfoDO::getAreaId, reqVO.getAreaId())
//                                    .eqIfExists(ComplainInfoDO::getIsTop, reqVO.getIsTop())
//                                    .eqIfExists(ComplainInfoDO::getSort, reqVO.getSort())
//                                    .eqIfExists(ComplainInfoDO::getAudit, PublishInfoEnum.PASS_THE_AUDIT.getCode());
//                        })
//                        .or(wrapper -> {
//                            wrapper.likeIfExists(ComplainInfoDO::getAreaName, s)
//                                    .eq(ComplainInfoDO::getUserId, SecurityFrameworkUtils.getLoginUserId())
//                                    .eqIfExists(ComplainInfoDO::getTypeId, reqVO.getTypeId())
//                                    .eqIfExists(ComplainInfoDO::getAreaId, reqVO.getAreaId())
//                                    .eqIfExists(ComplainInfoDO::getIsTop, reqVO.getIsTop())
//                                    .eqIfExists(ComplainInfoDO::getSort, reqVO.getSort())
//                                    .eqIfExists(ComplainInfoDO::getAudit, PublishInfoEnum.PASS_THE_AUDIT.getCode());
//                        })
//                        .or(wrapper -> {
//                            wrapper.likeIfExists(ComplainInfoDO::getAddress, s)
//                                    .eq(ComplainInfoDO::getUserId, SecurityFrameworkUtils.getLoginUserId())
//                                    .eqIfExists(ComplainInfoDO::getTypeId, reqVO.getTypeId())
//                                    .eqIfExists(ComplainInfoDO::getAreaId, reqVO.getAreaId())
//                                    .eqIfExists(ComplainInfoDO::getIsTop, reqVO.getIsTop())
//                                    .eqIfExists(ComplainInfoDO::getSort, reqVO.getSort())
//                                    .eqIfExists(ComplainInfoDO::getAudit, PublishInfoEnum.PASS_THE_AUDIT.getCode());
//                        })
//                        .leftJoin(MemberUserDO.class, MemberUserDO::getId, ComplainInfoDO::getUserId)
//                        .leftJoin(BusinessUserDO.class, BusinessUserDO::getUserId, ComplainInfoDO::getUserId)
//                        .leftJoin(BusinessCreditDO.class, BusinessCreditDO::getId, BusinessUserDO::getCreditId)
//                        .leftJoin(MemberTypeDO.class, MemberTypeDO::getId, BusinessUserDO::getMemberTypeId)
//                        .selectAs(BusinessCreditDO::getLevel, AppComplainInfoRespVO::getLevel)
//                        .selectAs(BusinessCreditDO::getIcon, AppComplainInfoRespVO::getIcon)
//                        .selectAs(BusinessUserDO::getIsAuth, AppComplainInfoRespVO::getIsAuth)
//                        .selectAs(BusinessUserDO::getAreaId, AppComplainInfoRespVO::getUserAreaId)
//                        .selectAs(MemberTypeDO::getName, AppComplainInfoRespVO::getMemberTypeName)
//                        .selectAs(MemberTypeDO::getIcon, AppComplainInfoRespVO::getMemberTypeIcon)
//                        .selectAs(MemberUserDO::getNickname, AppComplainInfoRespVO::getNickname)
//                        .selectAs(MemberUserDO::getAvatar, AppComplainInfoRespVO::getAvatar)
//                        .selectAs(MemberUserDO::getSex, AppComplainInfoRespVO::getSex)
//                        .selectAll(ComplainInfoDO.class)
//                        .orderByDesc(ComplainInfoDO::getIsTop)
//                        .orderByAsc(ComplainInfoDO::getSort));
//                list.addAll(data);
//            }
//            if (CollectionUtil.isEmpty(list)) {
//                return list.stream().distinct().collect(Collectors.toList());
//            }
//            return list;
//        }
        return selectJoinList(AppComplainInfoRespVO.class, new MPJLambdaWrapperX<ComplainInfoDO>()
                        .eq(ComplainInfoDO::getUserId, SecurityFrameworkUtils.getLoginUserId())
                        .eqIfPresent(ComplainInfoDO::getTypeId, reqVO.getTypeId())
                        .likeIfPresent(ComplainInfoDO::getInfoName, reqVO.getInfoName())
                        .eqIfPresent(ComplainInfoDO::getMobile, reqVO.getMobile())
                        .eqIfPresent(ComplainInfoDO::getAreaId, reqVO.getAreaId())
                        .eqIfPresent(ComplainInfoDO::getAddress, reqVO.getAddress())
                        .or(wrapper -> {
                            wrapper.likeIfExists(ComplainInfoDO::getRealName, reqVO.getInfoName())
                                    .eq(ComplainInfoDO::getUserId, SecurityFrameworkUtils.getLoginUserId())
                                    .eqIfExists(ComplainInfoDO::getTypeId, reqVO.getTypeId())
                                    .eqIfExists(ComplainInfoDO::getMobile, reqVO.getMobile())
                                    .eqIfExists(ComplainInfoDO::getAreaId, reqVO.getAreaId())
                                    .eqIfExists(ComplainInfoDO::getAddress, reqVO.getAddress())
                            ;
                        })
                        .or(wrapper -> {
                            wrapper.likeIfExists(ComplainInfoDO::getDescription, reqVO.getInfoName())
                                    .eq(ComplainInfoDO::getUserId, SecurityFrameworkUtils.getLoginUserId())
                                    .eqIfExists(ComplainInfoDO::getTypeId, reqVO.getTypeId())
                                    .eqIfExists(ComplainInfoDO::getMobile, reqVO.getMobile())
                                    .eqIfExists(ComplainInfoDO::getAreaId, reqVO.getAreaId())
                                    .eqIfExists(ComplainInfoDO::getAddress, reqVO.getAddress())
                            ;
                        })
                        .or(wrapper -> {
                            wrapper.likeIfExists(ComplainInfoDO::getCompany, reqVO.getInfoName())
                                    .eq(ComplainInfoDO::getUserId, SecurityFrameworkUtils.getLoginUserId())
                                    .eqIfExists(ComplainInfoDO::getTypeId, reqVO.getTypeId())
                                    .eqIfExists(ComplainInfoDO::getMobile, reqVO.getMobile())
                                    .eqIfExists(ComplainInfoDO::getAreaId, reqVO.getAreaId())
                                    .eqIfExists(ComplainInfoDO::getAddress, reqVO.getAddress())
                            ;
                        })
//                .eqIfPresent(ComplainInfoDO::getAudit, PublishInfoEnum.PASS_THE_AUDIT.getCode())
                        .leftJoin(MemberUserDO.class, MemberUserDO::getId, ComplainInfoDO::getUserId)
                        .leftJoin(BusinessUserDO.class, BusinessUserDO::getUserId, ComplainInfoDO::getUserId)
                        .leftJoin(BusinessCreditDO.class, BusinessCreditDO::getId, BusinessUserDO::getCreditId)
                        .leftJoin(MemberTypeDO.class, MemberTypeDO::getId, BusinessUserDO::getMemberTypeId)

                        .selectAs(BusinessCreditDO::getLevel, AppComplainInfoRespVO::getLevel)
                        .selectAs(BusinessCreditDO::getIcon, AppComplainInfoRespVO::getIcon)
                        .selectAs(BusinessCreditDO::getId, AppComplainInfoRespVO::getCreditId)
                        .selectAs(BusinessCreditDO::getName, AppComplainInfoRespVO::getCreditName)

                        .selectAs(BusinessUserDO::getIsAuth, AppComplainInfoRespVO::getIsAuth)
                        .selectAs(BusinessUserDO::getAreaId, AppComplainInfoRespVO::getUserAreaId)
                        .selectAs(BusinessUserDO::getBondName, AppComplainInfoRespVO::getBondName)

                        .selectAs(MemberTypeDO::getName, AppComplainInfoRespVO::getMemberTypeName)
                        .selectAs(MemberTypeDO::getIcon, AppComplainInfoRespVO::getMemberTypeIcon)
                        .selectAs(MemberUserDO::getNickname, AppComplainInfoRespVO::getNickname)
                        .selectAs(MemberUserDO::getAvatar, AppComplainInfoRespVO::getAvatar)
                        .selectAs(MemberUserDO::getSex, AppComplainInfoRespVO::getSex)

                        .selectAll(ComplainInfoDO.class)
                        .orderByDesc(ComplainInfoDO::getCreateTime)
        );
    }

    /**
     * 根据信息ID 查找投诉曝光信息
     * @param infoId
     * @return
     */
    default ComplainInfoDO selectByInfoId(long infoId) {
        return selectOne(ComplainInfoDO::getInfoId, infoId);
    }
}
